package com.itheima.reggie.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.itheima.reggie.common.R;
import com.itheima.reggie.dao.EmployeeDao;
import com.itheima.reggie.entity.Employee;
import com.itheima.reggie.entity.Page;
import com.itheima.reggie.exception.NameExistsException;
import com.itheima.reggie.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;

import java.time.LocalDateTime;
import java.util.List;

@Service
public class EmployeeServiceImpl implements EmployeeService{

    @Autowired(required = false)
    private EmployeeDao employeeDao;
    /*
    用户登录
     */
    @Override
    public R<Employee> login(Employee employee) {
        //1. 根据用户查找是否存在该用户
        Employee dbEmployee = employeeDao.findByName(employee);

        //2. 判断用户名是否查找到用户，如果没有查找到直接失败
        if(dbEmployee==null){
            return R.error("用户名不存在");
        }

        //3. 对比密码是否正确   用户输入的密码是明文的，需要进行md5加密才能够对比
        String inputPassword = DigestUtils.md5DigestAsHex(employee.getPassword().getBytes());
        if(!dbEmployee.getPassword().equals(inputPassword)){
            return R.error("密码错误");
        }


        //4. 查看登录用户的状态是否正常
        if(dbEmployee.getStatus()==0){
            return  R.error("用户被禁用");
        }

        //5. 如果上面三个情况都符合，允许登录
        return R.success(dbEmployee);
    }

    /*
    添加员工
     */
    @Override
    public void save(Employee employee) {
        //查询员工的名字是否存在
        Employee dbEmp = employeeDao.findByName(employee);
        //如果不为空
        if(dbEmp!=null){
            throw  new NameExistsException(employee.getUsername());
        }


        //1.补全用户的数据
        employee.setPassword(DigestUtils.md5DigestAsHex("123456".getBytes()));
        //2. 补全创建时间与修改时间、状态
        employee.setStatus(1);//默认是启用的状态
        employee.setCreateTime(LocalDateTime.now());
        employee.setUpdateTime(LocalDateTime.now());
        employeeDao.save(employee);
    }

    /*
    员工分页列表
     */
    @Override
    public Page<Employee> findByPage(Integer page, Integer pageSize, String name) {
        //1.  设置当前页与页面大小
        PageHelper.startPage(page,pageSize);
        //2.  查询当前页的数据
        List<Employee> employeeList = employeeDao.findByPage(name);
        //3.  创建PageInfo对象，把List传入。
        PageInfo<Employee> pageInfo = new PageInfo<>(employeeList);
        //4.  创建Page对象，然后把PageInfo的数据封装到page对象。
        Page<Employee> pageResult = new Page<>(); //alt+enter
        pageResult.setRecords(pageInfo.getList()) ;//页面的数据
        pageResult.setTotal(pageInfo.getTotal()); //总记录数
        pageResult.setPageSize(pageInfo.getPageSize()); //页面大小
        pageResult.setPage(pageInfo.getPageNum()); //当前页
        return pageResult;
    }

    @Override
    public void updateEmp(Employee employee) {
        employee.setUpdateTime(LocalDateTime.now());
        employeeDao.updateEmp(employee);
    }


    /**
     * 根据id查找员工
     * @param id
     * @return
     */
    @Override
    public Employee findById(Long id) {
        Employee employee = employeeDao.findById(id);
        return employee;
    }
}
